/********************************************
 * 功能说明: 
 * 模块名称: 
 * 系统名称: 
 * 软件版权: Frank
 * 系统版本: 1.0.0
 * 开发人员: Frank
 * 开发时间: 2019/10/21 10:11
 * 审核人员: 
 * 相关文档: 
 * 修改记录: 修改日期 修改人员 修改说明
 *********************************************/
package com.spring.arch.message.common.sender.sms;

import com.spring.arch.message.dto.MessageSenderRequest;
import com.spring.arch.message.dto.MessageSenderResponse;
import com.spring.arch.message.enums.MessageSendChannel;
import com.spring.arch.message.common.sender.AbstractSender;
import com.spring.arch.message.dto.MessageSenderRequest;
import com.spring.arch.message.dto.MessageSenderResponse;
import com.spring.arch.message.enums.MessageSendChannel;
import org.apache.commons.lang3.StringUtils;

/**
 * 短信发送器
 *
 * @author Frank
 * @version 1.0.0.1
 * @since 2019/10/21 10:11
 */
public abstract class SmsSender extends AbstractSender {

    @Override
    protected MessageSenderResponse checkSelf(MessageSenderRequest req) {
        if(!MessageSendChannel.SMS.equals(req.getChannel())) {
            return MessageSenderResponse.failure("消息发送渠道不是短信");
        }
        if(StringUtils.isBlank(req.getMobile())) {
            return MessageSenderResponse.failure("手机号不能为空");
        }
        return MessageSenderResponse.success();
    }

    @Override
    protected MessageSenderResponse toSend(MessageSenderRequest req) {
        // 根据业务类型获取短信模板信息
        SmsResult result = sendSms(req.getTempCode(), req.getContentParams(), req.getMobile());
        if(result.isSuccess()) {
            return MessageSenderResponse.success(result.getResult());
        } else {
            return MessageSenderResponse.failure("短信发送失败");
        }
    }

    /**
     * 发送请求
     *
     * @param templateCode 模板编号
     * @param params       参数
     * @param phoneNumber  手机号
     * @return 响应
     */
    public abstract SmsResult sendSms(String templateCode, String params, String phoneNumber);

}
